package com.tebiecloud.yunst.server.yunstservice;

import com.tebiecloud.yunst.client.model.yunst.CollectPay;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface YunStService {
	
	/**
	 * 创建会员接口
	 * @param memberType 会员类型：企业：2，个人：3
	 * @param source 访问终端类型：Mobile:1，PC:2
	 * @return
	 */
	String createMember(String bizUserId, String memberType, String source);
	
	/**
	 * 发送手机验证码
	 * @param bizUserId 第三方id
	 * @param phone
	 * @param verificationCodeType 9绑定手机类型
	 * @return
	 */
	Map<String,String> sendVerificationCode(String bizUserId, String phone, String verificationCodeType);
	
	/**
	 * 绑定手机接口
	 * @param bizUserId 会员id
	 * @param phoneNo 手机号码
	 * @return
	 */
	Map<String, String> bindPhone(String bizUserId, String phoneNo, String verificationCode);
	
	/**
	 * 换绑手机
	 * @param bizUserId
	 * @param phone
	 * @param newPhone
	 * @param verificationCode
	 * @return
	 */
	String changeBindPhone(String bizUserId, String phone, String newPhone, String verificationCode);
	
	
	/**
	 * 个人实名认证
	 * @param bizUserId 用户id
	 * @param name 名字
	 * @param identityNo 证件号码
	 * @return
	 */
	Map<String,String> setRealName(String bizUserId, String name, String identityNo);
	
	/**
	 * 会员电子签约
	 * @param bizUserId
	 * @param jumpUrl
	 * @param backUrl
	 * @return
	 */
	String signContract(String bizUserId, String jumpUrl, String backUrl);
	
	
	/**
	 * 绑定微信支付宝应用标识
	 * @param bizUserId
	 * @param acctType： weChatPublic -微信公众号 weChatMiniProgram -微信小程序 aliPayService -支付宝生活号
	 * @param acct 微信公众号支付 openid——微信分配、微信小程序支付 openid——微信分配、支付宝生活号支付 user_id——支付宝分配
	 * @return 返回json
	 */
	Map<String,String> applyBindAcct(String bizUserId, String acctType, String acct);
	
	/**
	 * 解绑
	 * @param bizUserId
	 * @param cardNo
	 * @return
	 */
	String unbindBankCard(String bizUserId, String cardNo);
	
	/**
	 * 查询用户信息
	 * @param bizUserId
	 * @return json
	 */
	Map<String,String> getMemberInfo(String bizUserId);
	
	/**
	 * 申请绑定银行卡
	 * @param bizUserId 用户id
	 * @param cardPhone 预留手机号
	 * @param cardNo 卡号
	 * @param name 开卡人名字
	 * @param identityNo 证件号
	 * @return
	 */
	HashMap<String, String> applyBindBankCard(String bizUserId, String cardPhone,
                                              String cardNo, String name, String identityNo);
	
	/**
	 * 确认绑定银行卡
	 * @param bizUserId 第三方id
	 * @param tranceNum 流水号
	 * @param transDate 申请时间
	 * @param phone 预留手机号
	 * @param verificationCode 短信验证码
	 * @return
	 */
	HashMap<String, String> bindBankCard(String bizUserId, String tranceNum, String transDate,
                                         String phone, String verificationCode);
	
	/**
	 * 托管代收（支付）
	 * @param payerId //付款人第三方id
	 * @param bizUserId //收款人第三方id
	 * @param amount //订单金额
	 * @param backUrl //后台回调地址
	 * @param payMethodStr //支付方式
	 * @return
	 */
	HashMap<String, String> agentCollectApplySimplify(String payerId, String bizUserId,
                                                      Long amount, String backUrl, String payMethodStr, String wxOpenId, String authCode);
	
	/**
	 * 获取订单详情
	 * @param bizOrderNo
	 * @return
	 */
	HashMap<String, String> getOrderDetail(String bizOrderNo);
	
	/**
	 * 托管代付（从中间账号转到商家账号）
	 * @param collectPays 源代收订单列表
	 * @param bizUserId 指定的会员id，于源代收订单，收款人id一致
	 * @return
	 */
	HashMap<String, String> signalAgentPay(List<CollectPay> collectPays, String bizUserId);
	
	/**
	 *
	 * 退款接口
	 * @param bizUserId //退款收款人
	 * @param oriBizOrderNo //原代付订单号
	 * @param amount //退款总金额
	 * @param backUrl //回调地址
	 * @return
	 */
	HashMap<String, String> refund(String bizUserId, String oriBizOrderNo, Long amount, String backUrl);
	
	/**
	 * 提现申请
	 * @param bizUserId
	 * @param amount
	 * @param feeTax
	 * @param backUrl
	 * @param bankCardNo
	 * @return
	 */
	HashMap<String, String> withdrawApply(String bizUserId, Long amount,int feeTax,
                                          String backUrl, String bankCardNo);
	
	/**
	 * 查询账号余额
	 * @param bizUserId
	 * @return
	 */
	HashMap<String, String> queryBalance(String bizUserId);
	
	/**
	 * 消费接口（会员之间、会员和平台之间转账使用）
	 * @param payerId //付款人id
	 * @param recieverId //收款人id
	 * @param amount //金额
	 * @param backUrl //回调接口
	 * @param payMethodStr //支付方式：
	 * @return
	 */
	HashMap<String, String> consumeApply(String payerId, String recieverId, Long amount,
                                         String backUrl, String payMethodStr,String openId,int expiredTime);


	/**
	 * 平台转账接口(从中间账号转到个人账户)
	 * @param targetBizUserId //收款员id
	 * @param amount //金额
	 * @return
	 */
	Map<String,String> applicationTransfer(String targetBizUserId, Long amount);

}
